package com.ljx.offer;

/**
 * @author 李捷禧
 * Date: 2023/3/14
 * ClassName: C_28
 */

public class C_28 {
    public boolean isSymmetric(TreeNode root) {
        if(root == null)return true;
        return isBoolean(root.left,root.right);
    }
    //重新定义一个递归函数
    private boolean isBoolean(TreeNode left, TreeNode right) {
        if(left == null && right == null) return true;
        //两个根节点都有值。就比他们的大小是否相等，还有 左左==右右，左右==右左 进行比较
        if(left != null && right != null)
            // 最好换一下顺序，提前判断两个值是否相同，不同就不需要继续往下判断了
            // 按你之前的方式，是在判断值之前，深层次去递归判断子树的结构是否一致后，最后才判断值是否相等的。为什么不直接判断值是否相等，直接进行扼杀递归呢
            return (left.val == right.val)
                    && isBoolean(left.left,right.right)
                    && isBoolean(left.right,right.left);
//            return isBoolean(left.left,right.right)
//                    && isBoolean(left.right,right.left)
//                    && (left.val == right.val);
        else
            return false;
    }

    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }
}
